#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    button = new QPushButton(this);
    button->setText("按钮1");
    connect(button,&QPushButton::clicked,this,&Widget::handleClick);

    srand(time(0));

    // 更改窗口标题，只能针对顶层窗口进行修改
    this->setWindowTitle("这是一个控件练习");

    // 更改窗口图标
    // QIcon icon("d:/git_warehouse/Qt/widget/mn.jpg");
    // 用绝对路径不好，因为用户不一定放在该目录下，所以使用qrc机制，放到qrc文件中
    // 使用方式：:(冒号)  前缀  文件名
    QIcon icon(":/mn.jpg");
    this->setWindowIcon(icon);

    // 设置光标样式
    QCursor cursor(Qt::WhatsThisCursor);
    ui->pushButton_add->setCursor(cursor);

    // 自定义光标样式
    QPixmap pixmap(":/rocket.png");// QPixmap是图片类，“阿里巴巴 矢量图标库下载”
    pixmap = pixmap.scaled(50, 50);// 设置图像大小

    QCursor mycursor(pixmap, 5, 5);// 初始化光标样式并设置热点位置，距离左上角的xy距离
    this->setCursor(mycursor);

    // 自定义文本字体样式
    QLabel* text = new QLabel(this);
    text->setText("这是一个测试文本属性的标签");
    text->move(300,350);

    QFont font;
    font.setFamily("微软雅黑");// 字体类型
    font.setPixelSize(30);// 字体大小
    font.setBold(true);// 是否加粗
    font.setItalic(true);// 是否倾斜
    font.setUnderline(true);// 下划线
    font.setStrikeOut(true);// 删除线

    text->setFont(font);

    //设置控件提示信息
    ui->pushButton_add->setToolTip("增加透明度\n使页面更加透明");
    ui->pushButton_add->setToolTipDuration(3000);// 停留三秒后消失
    ui->pushButton_sub->setToolTip("减少透明度\n使页面不透明");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handleClick()
{
    qDebug() << "按下按钮1";
}

// 设置控件是否可用
void Widget::on_pushButton_enable_clicked()
{
    bool enable = button->isEnabled();
    if(enable)
    {
        button->setEnabled(false);
        qDebug() << "按钮 1 不可用";
    }
    else
    {
        button->setEnabled(true);
        qDebug() << "按钮 1 可用";
    }
}

// 调整/获取控件大小位置，存放在一个QRect(rect:矩形)的结构体中
void Widget::on_pushButton_resize_clicked()
{

    QRect size = button->geometry();
    QRect* resize = new QRect(50, 50, 130, 41);
    if(size.x() == 0)
    {
        //button->setGeometry(50, 50, 130, 41);
        button->setGeometry(*resize);
        qDebug() << "调整按钮 1 大小位置";
    }

    //window frame窗口边框，geometry是不计算frame的
    QRect widget_size = geometry();
    QRect frame_size = frameGeometry();

    qDebug() << widget_size;
    qDebug() << frame_size;
}

// 测试标签和移动位置geometry
void Widget::on_pushButton_accept_clicked()
{
    ui->label->setText(" 亲亲抱抱");
}

// 按下松开触发
void Widget::on_pushButton_reject_clicked()
{
    // 不用了，pressed这个槽是按下就触发，而clicked是按下并松开后才触发
//    int width = this->width();
//    int height = this->height();

//    int x = rand() % width;
//    int y = rand() % height;

//    ui->pushButton_reject->move(x,y);
}

// 按下触发
void Widget::on_pushButton_reject_pressed()
{
    int width = this->width();
    int height = this->height();

    int x = rand() % width;
    int y = rand() % height;

    ui->pushButton_reject->move(x,y);
}

// 设置窗口透明度
void Widget::on_pushButton_add_clicked()
{

    float opacity = this->windowOpacity();
    if(opacity <= 0.1)
        return;
    opacity -= 0.1;
    this->setWindowOpacity(opacity);
}

void Widget::on_pushButton_sub_clicked()
{
    float opacity = this->windowOpacity();
        if(opacity >= 1.0)
            return;
        opacity += 0.1;
        this->setWindowOpacity(opacity);
}

